dynamics_frequency_response Module



Contents


Variables

Type Visibility Attributes Name Initial
integer(kind=int32), public, parameter :: FRF_ACCELERANCE_MODEL = 1

Defines an accelerance frequency response model.

integer(kind=int32), public, parameter :: FRF_RECEPTANCE_MODEL = 2

Defines a receptance frequency response model.


Interfaces

public interface dynamic_stiffness

  • private pure subroutine dynamic_stiffness_dense(omega, mass, damp, stiff, dyn_stiff)

    Computes the dynamic stiffness matrix at the specified frequency such that /( K_{dyn}(\omega) = K - \omega^{2} M + j \omega C /).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: omega

    The frequency, in rad/s.

    real(kind=real64), intent(in), dimension(:,:) :: mass

    The N-by-N mass matrix.

    real(kind=real64), intent(in), dimension(:,:) :: damp

    The N-by-N damping matrix.

    real(kind=real64), intent(in), dimension(:,:) :: stiff

    The N-by-N stiffness matrix.

    complex(kind=real64), intent(out), dimension(:,:) :: dyn_stiff

    The N-by-N dynamic stiffness matrix.

  • private pure function evaluate_accelerance_frf_model_scalar(mdl, w) result(rst)

    Evaluates the specified accelerance FRF model. The model is of the following form.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:) :: mdl

    The model parameter array. The elements of the array are stored as .

    real(kind=real64), intent(in) :: w

    The frequency value, in rad/s, at which to evaluate the model.

    Return Value complex(kind=real64)

    The resulting frequency response function.

  • private pure function evaluate_accelerance_frf_model_array(mdl, w) result(rst)

    Evaluates the specified accelerance FRF model. The model is of the following form.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:) :: mdl

    The model parameter array. The elements of the array are stored as .

    real(kind=real64), intent(in), dimension(:) :: w

    The frequency value, in rad/s, at which to evaluate the model.

    Return Value complex(kind=real64), allocatable, dimension(:)

    The resulting frequency response function.

  • private pure function evaluate_receptance_frf_model_scalar(mdl, w) result(rst)

    Evaluates the specified receptance FRF model. The model is of the following form.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:) :: mdl

    The model parameter array. The elements of the array are stored as .

    real(kind=real64), intent(in) :: w

    The frequency value, in rad/s, at which to evaluate the model.

    Return Value complex(kind=real64)

    The resulting frequency response function.

  • private pure function evaluate_receptance_frf_model_array(mdl, w) result(rst)

    Evaluates the specified receptance FRF model. The model is of the following form.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:) :: mdl

    The model parameter array. The elements of the array are stored as .

    real(kind=real64), intent(in), dimension(:) :: w

    The frequency value, in rad/s, at which to evaluate the model.

    Return Value complex(kind=real64), allocatable, dimension(:)

    The resulting frequency response function.

public interface frequency_response

Computes the frequency response functions for a system of ODE's.

  • private function frf_modal_prop_damp(mass, stiff, alpha, beta, freq, frc, modes, modeshapes, args) result(rst)

    Computes the frequency response functions for a multi-degree-of-freedom system that uses proportional damping such that the damping matrix is related to the stiffness an mass matrices by proportional damping coefficients and by .

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:,:) :: mass

    The N-by-N mass matrix for the system. This matrix must be symmetric.

    real(kind=real64), intent(in), dimension(:,:) :: stiff

    The N-by-N stiffness matrix for the system. This matrix must be symmetric.

    real(kind=real64), intent(in) :: alpha

    The mass damping factor, .

    real(kind=real64), intent(in) :: beta

    The stiffness damping factor, .

    real(kind=real64), intent(in), dimension(:) :: freq

    An M-element array of frequency values at which to evaluate the frequency response functions, in units of rad/s.

    procedure(modal_excite), intent(in), pointer :: frc

    A pointer to a routine used to compute the modal forcing function.

    real(kind=real64), intent(out), optional, allocatable, dimension(:) :: modes

    An optional N-element allocatable array that, if supplied, will be used to retrieve the modal frequencies, in units of rad/s.

    real(kind=real64), intent(out), optional, allocatable, dimension(:,:) :: modeshapes

    An optional N-by-N allocatable matrix that, if supplied, will be used to retrieve the N mode shapes with each vector occupying its own column.

    class(*), intent(inout), optional :: args

    An optional argument that can be used to communicate with the outside world.

    Return Value type(frf)

    The resulting frequency responses.

  • private function frf_modal_prop_damp_sparse(mass, stiff, alpha, beta, nmodes, freq, frc, modes, modeshapes, args) result(rst)

    Computes a modal-truncated frequency response for a system with proportional damping using CSR sparse mass and stiffness matrices. The damping matrix is defined by .

    Arguments

    Type IntentOptional Attributes Name
    type(csr_matrix), intent(in) :: mass

    The N-by-N symmetric positive-definite mass matrix.

    type(csr_matrix), intent(in) :: stiff

    The N-by-N symmetric stiffness matrix.

    real(kind=real64), intent(in) :: alpha

    The mass damping factor, .

    real(kind=real64), intent(in) :: beta

    The stiffness damping factor, .

    integer(kind=int32), intent(in) :: nmodes

    The number of lowest-frequency modes to retain. This value must be greater than zero and less than N.

    real(kind=real64), intent(in), dimension(:) :: freq

    An M-element array of frequency values in units of rad/s.

    procedure(modal_excite), intent(in), pointer :: frc

    A pointer to the physical forcing function.

    real(kind=real64), intent(out), optional, allocatable, dimension(:) :: modes

    An optional NMODES-element array containing the retained modal frequencies in units of rad/s.

    real(kind=real64), intent(out), optional, allocatable, dimension(:,:) :: modeshapes

    An optional N-by-NMODES matrix containing the mass-normalized retained mode shapes.

    class(*), intent(inout), optional :: args

    An optional argument passed to the forcing function.

    Return Value type(frf)

    The modal-truncated frequency responses.

  • private function frf_modal_prop_damp_2(mass, stiff, alpha, beta, nfreq, freq1, freq2, frc, modes, modeshapes, args) result(rst)

    Computes the frequency response functions for a multi-degree-of-freedom system that uses proportional damping such that the damping matrix is related to the stiffness an mass matrices by proportional damping coefficients and In modal coordinates, each mode has denominator and the physical response is reconstructed from the mode shapes. by .

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:,:) :: mass

    The N-by-N mass matrix for the system. This matrix must be symmetric.

    real(kind=real64), intent(in), dimension(:,:) :: stiff

    The N-by-N stiffness matrix for the system. This matrix must be symmetric.

    real(kind=real64), intent(in) :: alpha

    The mass damping factor, .

    real(kind=real64), intent(in) :: beta

    The stiffness damping factor, .

    integer(kind=int32), intent(in) :: nfreq

    The number of frequency values to analyze. This value must be at least 2.

    real(kind=real64), intent(in) :: freq1

    The starting frequency, in units of rad/s.

    real(kind=real64), intent(in) :: freq2

    The ending frequency, in units of rad/s.

    procedure(modal_excite), intent(in), pointer :: frc

    A pointer to a routine used to compute the modal forcing function.

    real(kind=real64), intent(out), optional, allocatable, dimension(:) :: modes

    An optional N-element allocatable array that, if supplied, will be used to retrieve the modal frequencies, in units of rad/s.

    real(kind=real64), intent(out), optional, allocatable, dimension(:,:) :: modeshapes

    An optional N-by-N allocatable matrix that, if supplied, will be used to retrieve the N mode shapes with each vector occupying its own column.

    class(*), intent(inout), optional :: args

    An optional argument that can be used to communicate with the outside world.

    Return Value type(frf)

    The resulting frequency responses.

  • private function frf_modal_prop_damp_sparse_2(mass, stiff, alpha, beta, nmodes, nfreq, freq1, freq2, frc, modes, modeshapes, args) result(rst)

    Computes a modal-truncated frequency response for a system with proportional damping using CSR sparse mass and stiffness matrices. The damping matrix is defined by .

    Arguments

    Type IntentOptional Attributes Name
    type(csr_matrix), intent(in) :: mass

    The N-by-N symmetric positive-definite mass matrix.

    type(csr_matrix), intent(in) :: stiff

    The N-by-N symmetric stiffness matrix.

    real(kind=real64), intent(in) :: alpha

    The mass damping factor, .

    real(kind=real64), intent(in) :: beta

    The stiffness damping factor, .

    integer(kind=int32), intent(in) :: nmodes

    The number of lowest-frequency modes to retain. This value must be greater than zero and less than N.

    integer(kind=int32), intent(in) :: nfreq

    The number of frequency values to analyze. This value must be at least 2.

    real(kind=real64), intent(in) :: freq1

    The starting frequency, in units of rad/s.

    real(kind=real64), intent(in) :: freq2

    The ending frequency, in units of rad/s.

    procedure(modal_excite), intent(in), pointer :: frc

    A pointer to the physical forcing function.

    real(kind=real64), intent(out), optional, allocatable, dimension(:) :: modes

    An optional NMODES-element array containing the retained modal frequencies in units of rad/s.

    real(kind=real64), intent(out), optional, allocatable, dimension(:,:) :: modeshapes

    An optional N-by-NMODES matrix containing the mass-normalized retained mode shapes.

    class(*), intent(inout), optional :: args

    An optional argument passed to the forcing function.

    Return Value type(frf)

    The modal-truncated frequency responses.

  • private function frf_general_damp_1(mass, damp, stiff, freq, frc, ranks, args) result(rst)

    Computes the frequency response functions for a multi-degree-of-freedom system that has a general damping matrix, and is not necessarily symmetric. The problem is treated as the solution to the linear system .

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:,:) :: mass

    The N-by-N mass matrix.

    real(kind=real64), intent(in), dimension(:,:) :: damp

    The N-by-N damping matrix.

    real(kind=real64), intent(in), dimension(:,:) :: stiff

    The N-by-N stiffness matrix.

    real(kind=real64), intent(in), dimension(:) :: freq

    An M-element array of frequency values at which to evaluate the frequency response functions, in units of rad/s.

    procedure(modal_excite), intent(in), pointer :: frc

    A pointer to a routine used to compute the modal forcing function.

    integer(kind=int32), intent(out), optional, dimension(:) :: ranks

    Provides information on the rank of the dynamic stiffness matrix for each frequency. If provided, this array must be the same length as freq.

    class(*), intent(inout), optional :: args

    An optional argument that can be used to communicate with the outside world.

    Return Value type(frf)

    The resulting frequency responses.

  • private function frf_general_damp_2(mass, damp, stiff, nfreq, freq1, freq2, frc, ranks, args) result(rst)

    Computes the frequency response functions for a multi-degree-of-freedom system that has a general damping matrix, and is not necessarily symmetric. The problem is treated as the solution to the linear system .

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:,:) :: mass

    The N-by-N mass matrix.

    real(kind=real64), intent(in), dimension(:,:) :: damp

    The N-by-N damping matrix.

    real(kind=real64), intent(in), dimension(:,:) :: stiff

    The N-by-N stiffness matrix.

    integer(kind=int32), intent(in) :: nfreq

    The number of frequency values to analyze. This value must be at least 2.

    real(kind=real64), intent(in) :: freq1

    The starting frequency, in units of rad/s.

    real(kind=real64), intent(in) :: freq2

    The ending frequency, in units of rad/s.

    procedure(modal_excite), intent(in), pointer :: frc

    A pointer to a routine used to compute the modal forcing function.

    integer(kind=int32), intent(out), optional, dimension(:) :: ranks

    Provides information on the rank of the dynamic stiffness matrix for each frequency. If provided, this array must be the same length as freq.

    class(*), intent(inout), optional :: args

    An optional argument that can be used to communicate with the outside world.

    Return Value type(frf)

    The resulting frequency responses.

  • private function siso_freqres(x, y, fs, win, method) result(rst)

    Estimates the frequency response of a single-input, single-output (SISO) system.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:) :: x

    An N-element array containing the excitation signal.

    real(kind=real64), intent(in), dimension(:) :: y

    An N-element array containing the response signal.

    real(kind=real64), intent(in) :: fs

    The sampling frequency, in Hz.

    class(window), intent(in), optional, target :: win

    The window to apply to the data. If nothing is supplied, no window is applied.

    integer(kind=int32), intent(in), optional :: method

    Enter 1 to utilize an H1 estimator; else, enter 2 to utilize an H2 estimator. The default is an H1 estimator.

    An H1 estimator is defined as the cross-spectrum of the input and response signals divided by the energy spectral density of the input. An H2 estimator is defined as the energy spectral density of the response divided by the cross-spectrum of the input and response signals.

    Return Value type(frf)

    The resulting frequency response function.

  • private function mimo_freqres(x, y, fs, win, method) result(rst)

    Estimates the frequency responses of a multiple-input, multiple-output (MIMO) system.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:,:) :: x

    An N-by-P array containing the P inputs to the system.

    real(kind=real64), intent(in), dimension(:,:) :: y

    An N-by-M array containing the M outputs from the system.

    real(kind=real64), intent(in) :: fs

    The sampling frequency, in Hz.

    class(window), intent(in), optional, target :: win

    The window to apply to the data. If nothing is supplied, no window is applied.

    integer(kind=int32), intent(in), optional :: method

    Enter 1 to utilize an H1 estimator; else, enter 2 to utilize an H2 estimator. The default is an H1 estimator.

    An H1 estimator is defined as the cross-spectrum of the input and response signals divided by the energy spectral density of the input. An H2 estimator is defined as the energy spectral density of the response divided by the cross-spectrum of the input and response signals.

    Return Value type(mimo_frf)

    The resulting frequency response functions.

interface

  • public subroutine modal_excite(freq, frc, args)

    Defines the interface to a routine for defining the forcing function for a modal frequency analysis.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: freq

    The excitation frequency. When used as a part of a frequency response calculation, this value will have the same units as the frequency values provided to the frequency response routine.

    complex(kind=real64), intent(out), dimension(:) :: frc

    An N-element array where the forcing function should be written.

    class(*), intent(inout), optional :: args

    An optional argument that can be used to communicate with the outside world.


Derived Types

type, public ::  frf

A container for a frequency response function, or series of frequency response functions.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public, allocatable, dimension(:) :: frequency

An N-element array containing the frequency values at which the FRF is provided. The units of this array are the same as the units of the frequency values passed to the routine used to compute the frequency response.

complex(kind=real64), public, allocatable, dimension(:,:) :: responses

An N-by-M matrix containing the M frequency response functions evaluated at each of the N frequency points.

type, public ::  mimo_frf

A container for the frequency responses of a system of multiple inputs and multiple outputs (MIMO).

Components

Type Visibility Attributes Name Initial
real(kind=real64), public, allocatable, dimension(:) :: frequency

A P-element array containing the frequency values at which the FRF is provided. The units of this array are the same as the units of the frequency values passed to the routine used to compute the frequency response.

complex(kind=real64), public, allocatable, dimension(:,:,:) :: responses

An N-by-M-by-P array containing the N frequency response functions for each of the M inputs corresponding to each of the P frequency points.


Functions

public function fit_frf(mt, n, freq, rsp, maxp, minp, init, stats, alpha, controls, settings, info) result(rst)

Fits an experimentally obtained frequency response by model for either a receptance model:

Read more…

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: mt

The excitation method. The options are as follows.

Read more…
integer(kind=int32), intent(in) :: n

The model order (# of resonant modes).

real(kind=real64), intent(in), dimension(:) :: freq

An M-element array containing the excitation frequency values in units of rad/s.

complex(kind=real64), intent(in), dimension(:) :: rsp

An M-element array containing the frequency response to fit.

real(kind=real64), intent(in), optional, dimension(:) :: maxp

An optional 3*N-element array that can be used as upper limits on the parameter values. If no upper limit is requested for a particular parameter, utilize a very large value. The internal default is to utilize huge() as a value.

real(kind=real64), intent(in), optional, dimension(:) :: minp

An optional 3*N-element array that can be used as lower limits on the parameter values. If no lower limit is requested for a particalar parameter, utilize a very large magnitude, but negative, value. The internal default is to utilize -huge() as a value.

real(kind=real64), intent(in), optional, dimension(:) :: init

An optional 3N-element array that, if supplied, provides an initial guess for each of the 3N model parameters for the iterative solver. If supplied, this array replaces the peak finding algorithm for estimating an initial guess.

type(regression_statistics), intent(out), optional, dimension(:) :: stats

An optional 3*N-element array that, if supplied, will be used to return statistics about the fit for each model parameter.

real(kind=real64), intent(in), optional :: alpha

The significance level at which to evaluate the confidence intervals. The default value is 0.05 such that a 95% confidence interval is calculated.

type(iteration_controls), intent(in), optional :: controls

An optional input providing custom iteration controls.

type(lm_solver_options), intent(in), optional :: settings

An optional input providing custom settings for the solver.

type(convergence_info), intent(out), optional :: info

An optional output that can be used to gain information about the iterative solution and the nature of the convergence.

Return Value real(kind=real64), allocatable, dimension(:)

An array containing the model parameters stored as .